package com.bbva.kyfb.kyfbdto.firmas.fachada.v01;

import java.io.Serializable;

import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * Tipo de dato de entrada que representa un filtro de busqueda
 * sobre una orden y que usuarios quedan por firmarlo.
 * @author xe35008
 *
 */
@XmlRootElement
public class InfoFilteredSignersRequest implements Serializable{

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 1L;


	/** Canal de la referencia. */
	private String sCanal;

	/** Banco Interno asociado a la referencia. */
	private String sBancoInt;

	/** Referencia asociada a la referencia. */
	private String sReferencia;

	/** Aplicacion de origen de la llamada. */
	//TODO: Quitar este default cuando el front este listo.
	private String sCodOrigen = "KYFB";

	/** Necesario para invocar al sistema de gestion de usuarios. */
	private String sBancoPr;

	/** Necesario para invocar al sistema de gestion de usuarios. */
	private String sProdServ;

	/** Necesario para invocar al sistema de gestion de usuarios. */
	private String sSubProdu;

	/** Necesario para invocar al sistema de gestion de usuarios. */
	private String sServicio;

	/** Necesario para invocar al sistema de gestion de usuarios. */
	private String sTipoAsunto;

	/** Necesario para invocar al sistema de gestion de usuarios. */
	private String sBancoAsunto;

	/** Tipo de firma que tiene contratada la referencia. */
	private String sTipoFirma;

	/** Identificador de la orden o fichero. */
	private String sIdOrdenFirmas;
	/**
	 * Tipo de la orden o fichero.
	 */
	private String sTipoOrden;

	/** Producto. */
	private String sCodProducto;

	/**
	 * Instantiates a new info filtered signers request.
	 */
	public InfoFilteredSignersRequest() {}

	/**
	 * Gets the s canal.
	 *
	 * @return the sCanal
	 */
	@NotNull
	@Length(min=4,max=4)
	public String getsCanal() {
		return sCanal;
	}

	/**
	 * Sets the s canal.
	 *
	 * @param sCanal the sCanal to set
	 */
	public void setsCanal(final String sCanal) {
		this.sCanal = sCanal;
	}

	/**
	 * Gets the s banco int.
	 *
	 * @return the sBancoInt
	 */
	@NotNull
	@Length(min=4,max=4)
	@Digits(fraction = 0, integer = 4)
	public String getsBancoInt() {
		return sBancoInt;
	}

	/**
	 * Sets the s banco int.
	 *
	 * @param sBancoInt the sBancoInt to set
	 */
	public void setsBancoInt(final String sBancoInt) {
		this.sBancoInt = sBancoInt;
	}

	/**
	 * Gets the s referencia.
	 *
	 * @return the sReferencia
	 */
	@NotNull
	@Length(min=8,max=8)
	@Digits(fraction=0,integer=8)
	public String getsReferencia() {
		return sReferencia;
	}

	/**
	 * Sets the s referencia.
	 *
	 * @param sReferencia the sReferencia to set
	 */
	public void setsReferencia(final String sReferencia) {
		this.sReferencia = sReferencia;
	}

	/**
	 * Gets the s cod origen.
	 * 
	 * @return the sCodOrigen
	 */
	//TODO: Volver a activar estas reglas cuando el front este listo
	//@NotEmpty
	//@Length(min = 4, max = 4)
	public String getsCodOrigen() {
		return sCodOrigen;
	}

	/**
	 * Sets the s cod origen.
	 * 
	 * @param sCodOrigen
	 *            the sCodOrigen to set
	 */
	public void setsCodOrigen(final String sCodOrigen) {
		this.sCodOrigen = sCodOrigen;
	}

	/**
	 * Gets the s banco pr.
	 *
	 * @return the sBancoPr
	 */
	@NotNull
	@Length(min=1,max=4)
	public String getsBancoPr() {
		return sBancoPr;
	}

	/**
	 * Sets the s banco pr.
	 *
	 * @param sBancoPr the sBancoPr to set
	 */
	public void setsBancoPr(final String sBancoPr) {
		this.sBancoPr = sBancoPr;
	}

	/**
	 * Gets the s prod serv.
	 *
	 * @return the sProdServ
	 */
	//	@NotEmpty
	//	@Length(min=4,max=4)
	public String getsProdServ() {
		return sProdServ;
	}

	/**
	 * Sets the s prod serv.
	 *
	 * @param sProdServ the sProdServ to set
	 */
	public void setsProdServ(final String sProdServ) {
		this.sProdServ = sProdServ;
	}

	/**
	 * Gets the s sub produ.
	 *
	 * @return the sSubProdu
	 */
	@NotNull
	@NotEmpty
	@Length(min=1,max=4)
	public String getsSubProdu() {
		return sSubProdu;
	}

	/**
	 * Sets the s sub produ.
	 *
	 * @param sSubProdu the sSubProdu to set
	 */
	public void setsSubProdu(final String sSubProdu) {
		this.sSubProdu = sSubProdu;
	}

	/**
	 * Gets the s servicio.
	 *
	 * @return the sServicio
	 */
	public String getsServicio() {
		return sServicio;
	}

	/**
	 * Sets the s servicio.
	 *
	 * @param sServicio the sServicio to set
	 */
	public void setsServicio(final String sServicio) {
		this.sServicio = sServicio;
	}

	/**
	 * Gets the s tipo asunto.
	 *
	 * @return the sTipoAsunto
	 */
	@NotNull
	@NotEmpty
	public String getsTipoAsunto() {
		return sTipoAsunto;
	}

	/**
	 * Sets the s tipo asunto.
	 *
	 * @param sTipoAsunto the sTipoAsunto to set
	 */
	public void setsTipoAsunto(final String sTipoAsunto) {
		this.sTipoAsunto = sTipoAsunto;
	}

	/**
	 * Gets the s banco asunto.
	 *
	 * @return the sBancoAsunto
	 */
	@NotNull
	@NotEmpty
	@Length(min=1,max=4)
	public String getsBancoAsunto() {
		return sBancoAsunto;
	}

	/**
	 * Sets the s banco asunto.
	 *
	 * @param sBancoAsunto the sBancoAsunto to set
	 */
	public void setsBancoAsunto(final String sBancoAsunto) {
		this.sBancoAsunto = sBancoAsunto;
	}

	/**
	 * Gets the s tipo firma.
	 *
	 * @return the sTipoFirma
	 */
	@NotEmpty
	@Length(min=2,max=2)
	@Pattern(regexp="FH|FS")
	public String getsTipoFirma() {
		return sTipoFirma;
	}

	/**
	 * Sets the s tipo firma.
	 *
	 * @param sTipoFirma the sTipoFirma to set
	 */
	public void setsTipoFirma(final String sTipoFirma) {
		this.sTipoFirma = sTipoFirma;
	}

	/**
	 * Gets the s id orden firmas.
	 *
	 * @return the sIdOrdenFirmas
	 */
	@NotNull
	@NotEmpty
	public String getsIdOrdenFirmas() {
		return sIdOrdenFirmas;
	}

	/**
	 * Sets the s id orden firmas.
	 *
	 * @param sIdOrdenFirmas the sIdOrdenFirmas to set
	 */
	public void setsIdOrdenFirmas(final String sIdOrdenFirmas) {
		this.sIdOrdenFirmas = sIdOrdenFirmas;
	}

	/**
	 * Gets the s tipo orden.
	 *
	 * @return the sTipoOrden
	 */
	@NotNull
	@NotEmpty
	@Length(min=3,max=3)
	public String getsTipoOrden() {
		return sTipoOrden;
	}

	/**
	 * Sets the s tipo orden.
	 *
	 * @param sTipoOrden the sTipoOrden to set
	 */
	public void setsTipoOrden(final String sTipoOrden) {
		this.sTipoOrden = sTipoOrden;
	}

	/**
	 * Gets the s cod prducto.
	 *
	 * @return the s cod prducto
	 */
	public String getsCodProducto() {
		return sCodProducto;
	}

	/**
	 * Sets the sCodProducto.
	 *
	 * @param sCodProducto the new s cod prducto
	 */
	public void setsCodProducto(final String sCodProducto) {
		this.sCodProducto = sCodProducto;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "InfoFilteredSignersRequest [sCanal=" + sCanal + ", sBancoInt="
				+ sBancoInt + ", sReferencia=" + sReferencia + ", sBancoPr="
				+ sBancoPr + ", sProdServ=" + sProdServ + ", sSubProdu="
				+ sSubProdu + ", sServicio=" + sServicio + ", sTipoAsunto="
				+ sTipoAsunto + ", sBancoAsunto=" + sBancoAsunto
				+ ", sTipoFirma=" + sTipoFirma + ", sIdOrdenFirmas="
				+ sIdOrdenFirmas + ", sTipoOrden=" + sTipoOrden
				+ ", sCodProducto=" + sCodProducto + "]";
	}

}
